package com.qf.service.impl;

import com.qf.dao.LogDao;
import com.qf.dao.ProductDao;
import com.qf.dao.impl.LogDaoImpl;
import com.qf.dao.impl.ProductDaoImpl;
import com.qf.model.*;
import com.qf.model.pojo.MyPro;
import com.qf.service.ProductService;
import com.qf.utils.DruidUtil;

import java.sql.Connection;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.List;

public class ProductServiceImpl implements ProductService {
    private ProductDao productDao = new ProductDaoImpl();

    //查询所有理财产品
    @Override
    public List<Product> findAll() {
        return productDao.findAll();
    }


    //根据id查询理财产品信息

    @Override
    public Product findByPid(int pid) {
        return productDao.findByPid(pid);
    }


    //购买理财产品  事务操作1.银行卡扣款。2.添加我的产品信息3.添加日志
    //user ：用户对象
    //card ：银行卡对象 （使用用户app余额付款时可以为空）
    //product ：理财产品对象
    //money：需要扣款金额
    //num ：份额
    //p：   1：app扣款  2：表示：银行卡扣款
    @Override
    public int cardBuyProduct(double money, int num, int p, User user, Card card, Product product) {
        Connection conn = DruidUtil.getConnection();
        //开启事务
        DruidUtil.begin(conn);
        Log log = null;
        //1.银行卡扣款
        int i = 0;
        if (p == 1) {
            //app扣款
            i = productDao.lessenUserMoney(conn, user.getU_id(), money);
            log = new Log(
                    user.getU_idcard(),
                    user.getU_phone(),
                    user.getU_id().toString(),
                    money,
                    1,
                    //new Date(new java.util.Date().getTime()),
                    new Timestamp(new java.util.Date().getTime()),
                    4,
                    "购买" + num + "份" + product.getP_name() + "理财产品"
            );
        } else {
            //银行卡扣款
            i = productDao.lessenCardMoney(conn, card.getC_id(), money);
            log = new Log(
                    user.getU_idcard(),
                    user.getU_phone(),
                    card.getC_id(),
                    money,
                    1,
                    //new Date(new java.util.Date().getTime()),
                    new Timestamp(new java.util.Date().getTime()),
                    4,
                    "购买" + num + "份" + product.getP_name() + "理财产品"
            );
        }
        //2.添加我的产品
        MyProduct myProduct = new MyProduct(
                product.getP_id(),
                user.getU_id(),
                num,
                new Date(new java.util.Date().getTime()),
                //new Timestamp(new java.util.Date().getTime()),
                money,
                money
        );
        int j = productDao.addMyProduct(conn, myProduct);
        //3.添加日志
        LogDao logDao = new LogDaoImpl();
        int k = logDao.addLog(conn, log);


        //判断是否可以提交事务
        if (i == 1 && j == 1 && k == 1) {
            DruidUtil.commit(conn);
            DruidUtil.close(conn);
            return 1;
        } else {
            DruidUtil.rollback(conn);
            DruidUtil.close(conn);
            return 0;
        }

    }

    //卖出理财产品， 事务操作 1.银行卡加钱。2.修改我的产品信息3.添加日志
    @Override
    public int sellProduct(double rate, User user, Card card, MyProduct myProduct) {
        //开启事务
        Connection conn = DruidUtil.getConnection();
//        DruidUtil.commit(conn);
        DruidUtil.begin(conn);

        //计算可以提现的余额
        double money=rate+myProduct.getMoney();

        //银行卡加钱
        int i=productDao.addCardMoney(conn,card.getC_id(),money);
        //修改我的产品信息
        myProduct.setMoney(0.0);
        myProduct.setDate(new Date(new java.util.Date().getTime()));
        int i1 = productDao.updateMyPro(conn, myProduct);

        //添加日志信息
        Log log = new Log(
                user.getU_idcard(),
                user.getU_phone(),
                card.getC_id(),
                money,
                2,
//                new Date(new java.util.Date().getTime()),
                new Timestamp(new java.util.Date().getTime()),
                4,
                user.getU_name()+"卖出理财产品"+money+"元"
        );
        LogDao logDao=new LogDaoImpl();
        int i2 = logDao.addLog(conn, log);
        if(i==1&&i1==1&&i2==1){
            DruidUtil.commit(conn);
            DruidUtil.close(conn);
            return 1;
        }
        else {
            DruidUtil.rollback(conn);
            DruidUtil.close(conn);
            return 0;
        }
    }

    //根据用户id 查询我的理财信息
    @Override
    public List<MyPro> findMyProByUid(int uid) {
        return productDao.findMyProByUid(uid);
    }
    //根据用户id 查询已审核银行卡信息

    @Override
    public List<Card> findCardByUid(int uid) {
        return productDao.findCardByUid(uid);
    }
    //根据我的产品id 查询出已经购买的我的产品信息

    @Override
    public MyProduct findMyProById(int id) {
        return productDao.findMyProById(id);
    }
}
